#include <stdio.h>

void main(void)
{
    // register说明符向编译器表示，该变量是经常使用的，应该提供最快的读取速度，所以应该放进寄存器。但是，编译器可以忽略这个说明符，不一定按照这个指示行事。
    // register int a;
    // 上面示例中，register提示编译器，变量a会经常用到，要为它提供最快的读取速度。
    // register只对声明在代码块内部的变量有效。
    // 设为register的变量，不能获取它的地址。
    // register int aa;
    // int *p = &aa; // 编译器报错
    // 上面示例中， &a会报错，因为变量a可能放在寄存器里面，无法获取内存地址。

    // 如果数组设为register，也不能获取整个数组或任一个数组成员的地址。
    // register int a[] = {11, 22, 33, 44, 55};
    // int p = a;  // 报错
    // int a = *(a + 2); // 报错
    // 历史上，CPU 内部的缓存，称为寄存器（register）。与内存相比，寄存器的访问速度快得多，所以使用它们可以提高速度。
    // 但是它们不在内存之中，所以没有内存地址，这就是为什么不能获取指向它们的指针地址。
    // 现代编译器已经有巨大的进步，会尽可能优化代码，按照自己的规则决定怎么利用好寄存器，取得最佳的执行速度，
    // 所以可能会忽视代码里面的register说明符，不保证一定会把这些变量放到寄存器。
}